.. _cmmIxArc3P: cmmIxArc3P ================= ----------------- SYNOPSIS ``````````` .. code-block:: none VT_I4 cmmIxArc3P( [in] VT_I4 MapIndex, [in] VT_R8 P2X, [in] VT_R8 P2Y, [in] VT_R8 P3X, [in] VT_R8 P3Y, [in] VT_R8 EndAngle, [in] VT_I4 IsBlocking ) DESCRIPTION ````````````` - 본 함수는 원호의 중심점 및 종점 좌표를 사용하는 cmmIxArcP(상대 좌표) 또는 cmmIxArcP (절대 좌표) 함수와는 달리 현재 좌표(1 차)를 포함해서 2 차 및 3 차 좌표의 총 3 개의 (X, Y) 순서쌍 좌표를 사용해서 원호 보간을 수행합니다. 결과적으로 세 점을 지나게 되므로 중심점은 자동으로 결정됩니다. PARAMETER ````````````` - MapIndex : 맵번호(Map index), 이 맵번호를 사용하기전에 먼저 cmmIxMapAxes() 함수를 통하여 해당 맵번호에 유효한 축들이 맵핑되어 있어야 합니다. \ - VT_R8P2X : 원호가 지나는 2 번째 점의 X 좌표 입니다. \ - VT_R8P2Y : 원호가 지나는 2 번째 점의 Y 좌표 입니다. \ - VT_R8P3X : 원호가 지나는 3 번째 점의 X 좌표 입니다. \ - VT_R8P3Y : 원호가 지나는 3 번째 점의 Y 좌표 입니다 \ - EndAngle : 중심점과 출발점을 잇는 선분이 중심점과 종점을 잇는 선분과 이루는 각도를 의미 합니다. .. csv-table:: :widths: 10 85 :header-rows: 1 :stub-columns: 0 Value, Meaning 0도, 3번째 점에서 보간 이송 완료 하도록 설정. 이 경우 종점도 3번째 점이 됩니다. "| 0 도 초과 360도 이하", " | 현재 좌표(1 번째), 2 번째 및 3 번째를 지나 중심점으로부터 해당 각도 만큼 | 원호 보간 이송이 수행됩니다. | 단 각도가 2 번째 또는 3 번째 점을 지나기에 모자라는 경우는 해당 각도 | 까지만 그려지고 2 번째 및 3 번째 점은 지나지 않게 됩니다." - IsBlocking : 완료될 때까지 기다리는 동안 윈도우 메시지를 블록(Blocking)할 것인지를 결정합니다. .. csv-table:: :widths: 10 85 :header-rows: 1 :stub-columns: 0 Value, Meaning cmFALSE, 블록(Blocking)을 하지 않습니다. 따라서 해당 모션이 완료되는 동안에도 윈도우 이벤트를 처리합니다. cmTRUE, 블록(Blocking)을 합니다. 따라서 해당 모션이 완료되는 동안에는 윈도우 이벤트가 처리되지 않습니다. RETURN VALUE ````````````` +--------------+-----------+ | Value | Meaning | +==============+===========+ | 음수 | 수행 실패 | +--------------+-----------+ | cmERR_NONE | 수행 성공 | +--------------+-----------+ REFERENCE ``````````` .. note:: 이 함수 사용 시 현재 좌표를 포함한 3 개의 점이 거의 직선에 가깝게 설정되는 경우는 사실상 지름이 무한대 거나 상당히 큰 원을 그려야 하는 문제가 발생하며, 이 경우는 함수 수행은 되고 반환값이 cmERR_NONE 이 되더라도 실제로는 제대로 이송이 안되고 원호 보간 이송에 실패할 수 있음에 유의해야 합니다. .. code-block:: c++ :linenos: :emphasize-lines: 5 C/C++ /*************************************************************** * OnSetSpeed : 이 함수는 속도설정의 변경이 필요할 때 * 호출되는 가상의 함수 입니다. * ***************************************************************/ #define MAP0 0 //맵번호 (0) void OnSetSpeed() { cmmIxMapAxes(MAP0, cmX1_MASK | cmY1_MASK, 0 ); //또는 cmmIxMapAxes(MAP0, 0x3, 0x0); //보간 이동할 축들의 기본속도를 설정합니다. cmmCfgSetSpeedPattern(cmX1, cmSMODE_T, 1000, 5000, 5000); cmmCfgSetSpeedPattern(cmY1, cmSMODE_T, 1000, 5000, 5000); } /************************************************************** * OnDoMotion() : 작업명령시에 호출되는 가상의 함수 **************************************************************/ void OnDoMotion() { double fPos2x, fPos2y, fPos3x, fPos3y; //MAP0 를 마스터 속도 모드, Trapezoidal 속도 패턴으로 작업속도의 100%, //가속도의 70%, 감속도의 70%로 설정 합니다. cmmIxSetSpeedPattern(MAP0, cmFALSE, cmSMODE_T, 100, 70, 70 ); // 현재 위치를 (0, 0) 이라고 가정, 2 번째 및 3 번째 지나는 점 설정 및 이송 시작 // 끝 각은 270 도로 설정 fPos2x=1000; fPos2y=1000; fPos3x=2000; fPos3y=2000; cmmIxArc3P(MAP0, fPos2x, fPos2y, fPos3x, fPos3y, 270, cmFALSE); } .. code-block:: none :linenos: Visual Basic ‘ *************************************************************** ‘ OnSetSpeed : 이 함수는 속도설정의 변경이 필요할 때 ‘ 호출되는 가상의 함수 입니다. ‘ *************************************************************** Const MAP0 = 0 ‘맵번호 (0) Private Sub OnSetSpeed() Call cmmIxMapAxes(MAP0, cmX1_MASK Or cmY1_MASK, 0 ) ‘ 또는 Call cmmIxMapAxes(MAP0, &H3, &H0); ‘ 보간 이동할 축들의 기본속도를 설정합니다. Call cmmCfgSetSpeedPattern(cmX1, cmSMODE_T, 1000, 5000, 5000) Call cmmCfgSetSpeedPattern(cmY1, cmSMODE_T, 1000, 5000, 5000) End Sub ‘ ************************************************************** ‘ OnDoMotion() : 작업명령시에 호출되는 가상의 함수 ‘ ************************************************************** Private Sub OnDoMotion() Dim fPos2x As Double Dim fPos2y As Double Dim fPos3x As Double Dim fPos3y As Double ‘ MAP0 를 마스터 속도 모드, Trapezoidal 속도 패턴으로 작업속도의 100%, ‘ 가속도의 70%, 감속도의 70%로 설정 합니다. Call cmmIxSetSpeedPattern(MAP0, cmFALSE, cmSMODE_T, 100, 70, 70 ) ‘ 현재 위치를 (0, 0) 이라고 가정, 2 번째 및 3 번째 지나는 점 설정 및 이송 시작 ‘ 끝 각은 270 도로 설정 fPos2x=1000 fPos2y=1000 fPos3x=2000 fPos3y=2000 Call cmmIxArc3P(MAP0, fPos2x, fPos2y, fPos3x, fPos3y, 270, cmFALSE) End Sub .. code-block:: none :linenos: Delphi //*************************************************************** // OnSetSpeed : 이 함수는 속도설정의 변경이 필요할 때 // 호출되는 가상의 함수 입니다. //**************************************************************** Const MAP0 = 0; //맵번호 (0) procedure OnSetSpeed(); begin cmmIxMapAxes(MAP0, cmX1_MASK or cmY1_MASK, 0 ); //또는 cmmIxMapAxes(MAP0, $3, $0); //보간 이동할 축들의 기본속도를 설정합니다. cmmCfgSetSpeedPattern(cmX1, cmSMODE_T, 1000, 5000, 5000); cmmCfgSetSpeedPattern(cmY1, cmSMODE_T, 1000, 5000, 5000); end; //************************************************************** // OnDoMotion() : 작업명령시에 호출되는 가상의 함수 //************************************************************** procedure OnDoMotion(); var fPos2x : Double; fPos2y : Double; fPos3x : Double; fPos3y : Double; begin //MAP0 를 마스터 속도 모드, Trapezoidal 속도 패턴으로 작업속도의 100%, //가속도의 70%, 감속도의 70%로 설정 합니다. cmmIxSetSpeedPattern(MAP0, cmFALSE, cmSMODE_T, 100, 70, 70 ); // 현재 위치를 (0, 0) 이라고 가정, 2 번째 및 3 번째 지나는 점 설정 및 이송 시작 // 끝 각은 270 도로 설정 fPos2x :=1000; fPos2y :=1000; fPos3x :=2000; fPos3y :=2000; cmmIxArc3P(MAP0, fPos2x, fPos2y, fPos3x, fPos3y, 270, cmFALSE); end; .. seealso:: :ref:`cmmIxArcP`, :ref:`cmmIxArcPTo`, :ref:`cmmIxArcPStart`, :ref:`cmmIxArc3PStart`